tg-me.com/golangtests/775
Last Update:
🧠 Хитрая задача на Go: "Петля Блуждающего Робота"
Представь: у тебя есть робот, который бродит по бесконечной двумерной решетке. Он выполняет команды из строки:
- 'G'
— идти вперед
- 'L'
— повернуть налево (90°)
- 'R'
— повернуть направо (90°)
Робот стартует из точки (0, 0)
и смотрит на север. Команды повторяются бесконечно. Нужно определить:
👉 Зациклится ли движение робота?
(т.е. вернётся ли он в исходную точку или навсегда останется в замкнутом цикле)
📌 Примеры:
isLooping("GLGLGLG") => true // движется по квадрату
isLooping("GG") => false // уходит навсегда
🧩 Подвох задачи:
На первый взгляд кажется, что нужно бесконечно симулировать команды. Но на самом деле всё решается за один проход строки!
Важно: если после одного прохода робот:
- вернулся в (0,0) или
- сменил направление — значит, будет цикл.
✅ Go-реализация:
```go
func isLooping(commands string) bool {
dirs := [][2]int{{0,1}, {1,0}, {0,-1}, {-1,0}} // север, восток, юг, запад
x, y, d := 0, 0, 0
for _, c := range commands {
switch c {
case 'G':
x += dirs[d][0]
y += dirs[d][1]
case 'L':
d = (d + 3) % 4
case 'R':
d = (d + 1) % 4
}
}
return (x == 0 && y == 0) || d != 0
}
```
🎯 Отличная задача для собеседования: она проверяет
• понимание направления и симуляции
• знание работы с векторами
• умение заменить бесконечный цикл на математический анализ
@golangtests
BY Go tests
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/golangtests/775